package com.ifonly.datatables;

import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 * . DataTables 工具类
 * </p>
 *
 * @author Jerry Ou
 * @version 1.0 2015-08-31 14:49
 * @since JDK 1.6
 */
public class DTUtils {

    /**
     * 将字符串转成 boolean 类型，并可指定失败默认返回值
     *
     * @param str 需要转化的字符串
     * @param defaultValue 失败默认返回值
     * @return boolean类型数据
     */
    public static boolean parseBoolean(String str, boolean defaultValue) {
        try {
            return Boolean.parseBoolean(str);
        } catch (Exception e) {
            return defaultValue;
        }
    }

    /**
     * 将字符串转成 boolean 类型，默认返回false
     *
     * @param str 需要转化的字符串
     * @return boolean类型数据
     */
    public static boolean parseBoolean(String str) {
        return parseBoolean(str, false);
    }

    /**
     * 将字符串转成 int 类型，并可指定失败默认返回值
     *
     * @param str str 需要转化的字符串
     * @param defaultValue 失败默认返回值
     * @return int类型数据
     */
    public static int parseInt(String str, int defaultValue) {
        try {
            return Integer.parseInt(str);
        } catch (Exception e) {
            return defaultValue;
        }
    }

    /**
     * 将字符串转成 int 类型，失败默认返回0
     *
     * @param str str 需要转化的字符串
     * @return int类型数据
     */
    public static int parseInt(String str) {
        return parseInt(str, 0);
    }

    /**
     * 判读字符串是否为 null 或 空串
     *
     * @param str 字符串
     * @return true - 是否为 null 或 空串
     */
    public static boolean strNullOrEmpty(String str) {
        return str == null || str.length() == 0;
    }

    /**
     * 获取 column 下标
     * @param name 参数名
     * @return column 下标
     */
    public static String columnsIndexFromName(String name) {
        return name.substring(DTConstants.COLUMNS_PREFIX.length(), name.indexOf("]"));
    }

    /**
     * 获取 order 下标
     * @param name 参数名
     * @return order 下标
     */
    public static String orderIndexFromName(String name) {
        return name.substring(DTConstants.ORDER_PREFIX.length(), name.indexOf("]"));
    }

    /**
     * 重新分配下标
     *
     * @param list 原 List 对象
     * @param addSize 添加的大小
     * @param <T> List 范型对象
     * @return 新 List 对象
     */
    public static <T> List<T> newList(List<T> list, int addSize) {
        List<T> newList = new ArrayList<T>(list.size() + addSize);
        newList.addAll(list);
        return newList;
    }

    /**
     * 重新分配下标, 并将index之前的内容进行初始化
     *
     * @param list 原 List 对象
     * @param length 大小
     * @param <T> List 范型对象
     * @return 新 List 对象
     */
    public static <T> List<T> newList(List<T> list, int length, int index) {
        List<T> newList = new ArrayList<T>(length);
        newList.addAll(list);
        if (list.size() == 0) {
            for (int i = 0; i <= index; i++) {
                newList.add(null);
            }
        } else {
            for (int i = list.size(); i <= index; i++) {
                newList.add(null);
            }
        }
        return newList;
    }

    /**
     * like 条件处理
     *
     * @param value 查询值
     * @return 处理值
     */
    public static String like(String value) {
        return "%" + value + "%";
    }

    /**
     * left like 条件处理
     * @param value 查询值
     * @return 处理值
     */
    public static String llike(String value) {
        return "%" + value;
    }

    /**
     * right like 条件处理
     * @param value 查询值
     * @return 处理值
     */
    public static String rlike(String value) {
        return value + "%";
    }

}
